﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Runtime.Serialization;
using System.ComponentModel;

namespace elr_tracking_bal.CAT
{
    public class TipoPedimento : INotifyPropertyChanged 
    {
        public int _ID_TIPO_PEDIMENTO;
        public string _TIPO_PEDIMENTO;
        public string _CLAVE;
        public string _REGIMEN;
        public string _NOTA;

        public int ID_TIPO_PEDIMENTO
        {
            get
            {
                return _ID_TIPO_PEDIMENTO;
            }
            set
            {
                if (_ID_TIPO_PEDIMENTO != value)
                {
                    _ID_TIPO_PEDIMENTO = value;
                    if (this.PropertyChanged != null)
                    {
                        this.PropertyChanged(this, new PropertyChangedEventArgs("ID_TIPO_PEDIMENTO"));
                    }
                }
            }
        }

        public string TIPO_PEDIMENTO
        {
            get
            {
                return _TIPO_PEDIMENTO;
            }
            set
            {
                if (_TIPO_PEDIMENTO != value)
                {
                    _TIPO_PEDIMENTO = value;
                    if (this.PropertyChanged != null)
                    {
                        this.PropertyChanged(this, new PropertyChangedEventArgs("TIPO_PEDIMENTO"));
                    }
                }
            }
        }

        public string CLAVE
        {
            get
            {
                return _CLAVE;
            }
            set
            {
                if (_CLAVE != value)
                {
                    _CLAVE = value;
                    if (this.PropertyChanged != null)
                    {
                        this.PropertyChanged(this, new PropertyChangedEventArgs("CLAVE"));
                    }
                }
            }
        }

        public string REGIMEN
        {
            get
            {
                return _REGIMEN;
            }
            set
            {
                if (_REGIMEN != value)
                {
                    _REGIMEN = value;
                    if (this.PropertyChanged != null)
                    {
                        this.PropertyChanged(this, new PropertyChangedEventArgs("REGIMEN"));
                    }
                }
            }
        }

        public string NOTA
        {
            get
            {
                return _NOTA;
            }
            set
            {
                if (_NOTA != value)
                {
                    _NOTA = value;
                    if (this.PropertyChanged != null)
                    {
                        this.PropertyChanged(this, new PropertyChangedEventArgs("NOTA"));
                    }
                }
            }
        }

        /// <summary>
        /// Método que ejecuta un store para obtener los Tipo de Pedimento
        /// </summary>
        /// <returns></returns>
        public static DataTable GetData()
        {
            DataTable dt;
            dt = elr_tracking_dal.SrvDB.ExecuteQuery("exec SP_GETLIST_CAT_TIPO_PEDIMENTO");
            return dt;
        }
        /// <summary>
        /// Método para obtener la lista de los Tipo de Pedimento
        /// </summary>
        /// <returns></returns>
        public static List<TipoPedimento> GetDataTipoPedimento()
        {
            try
            {
                DataTable dt;
                dt = TipoPedimento.GetData();
                if (dt.Rows.Count == 0)
                {
                    return null;
                }
                else
                {
                    List<TipoPedimento> list = dt.AsEnumerable().Select(
                        row => new TipoPedimento
                        {
                            ID_TIPO_PEDIMENTO = row.Field<int?>("ID_TIPO_PEDIMENTO").GetValueOrDefault(),
                            TIPO_PEDIMENTO = String.IsNullOrEmpty(row.Field<string>("TIPO_PEDIMENTO")) ? "" : row.Field<string>("TIPO_PEDIMENTO"),
                            CLAVE = String.IsNullOrEmpty(row.Field<string>("CLAVE")) ? "" : row.Field<string>("CLAVE"),
                            REGIMEN = String.IsNullOrEmpty(row.Field<string>("REGIMEN")) ? "" : row.Field<string>("REGIMEN"),
                            NOTA = String.IsNullOrEmpty(row.Field<string>("NOTA")) ? "" : row.Field<string>("NOTA"),
                        }
                        ).ToList();
                    return list;
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        /// <summary>
        /// Método para insertar un Tipo de Pedimento
        /// </summary>
        /// <param name="cat"></param>
        /// <returns></returns>
        public static elr_tracking_bal.UpsertStateMsg InsertTipoPedimento(TipoPedimento cat)
        {
            TipoPedimento inser;
            UpsertStateMsg inserCat;
            try
            {
                int dt = elr_tracking_dal.SrvDB.ExecuteNonQuery("exec SP_INSERT_CAT_TIPO_PEDIMENTO '" + cat.TIPO_PEDIMENTO + "','" + cat.CLAVE + "','" + cat.REGIMEN + "','" + cat.NOTA + "'");

                inser = new TipoPedimento(cat.TIPO_PEDIMENTO, cat.CLAVE, cat.REGIMEN, cat.NOTA);
                inserCat = new UpsertStateMsg("Registros guardados " + dt.ToString(), true);
                return inserCat;
            }
            catch (Exception ex)
            {
                inserCat = new UpsertStateMsg("Error al guardar " + ex, false);
                return inserCat;
            }
        }
        /// <summary>
        /// Método para eliminar Tipos de Pedimento
        /// </summary>
        /// <param name="ID_TIPO_PEDIMENTO"></param>
        /// <returns></returns>
        public static elr_tracking_bal.DeleteStateMsg DeleteTipoPedimento(string[] ID_TIPO_PEDIMENTO)
        {
            elr_tracking_bal.DeleteStateMsg delete;
            string join;
            if (ID_TIPO_PEDIMENTO == null)
            {
                join = "";
            }
            else
            {
                join = String.Join(",", ID_TIPO_PEDIMENTO);
            }
            try
            {
                int dt = elr_tracking_dal.SrvDB.ExecuteNonQuery("exec SP_DELETE_CAT_TIPO_PEDIMENTO '" + join + "'");
                delete = new elr_tracking_bal.DeleteStateMsg("Registro eliminado" + dt.ToString(), true);
                return delete;
            }
            catch (Exception ex)
            {
                delete = new elr_tracking_bal.DeleteStateMsg("Error al eliminar" + ex, false);
                return delete;
            }
        }
        /// <summary>
        /// Método que actualiza un Tipo de Pedimento
        /// </summary>
        /// <param name="cat"></param>
        /// <returns></returns>
        public static elr_tracking_bal.UpsertStateMsg UpdateTipoPedimento(TipoPedimento cat)
        {
            TipoPedimento update;
            UpsertStateMsg updateCat;
            try
            {
                int dt = elr_tracking_dal.SrvDB.ExecuteNonQuery("exec SP_UPDATE_CAT_TIPO_PEDIMENTO " + cat.ID_TIPO_PEDIMENTO + ",'" + cat.TIPO_PEDIMENTO +"','"+cat.CLAVE+"','"+cat.REGIMEN+"','"+cat.NOTA+ "'");
                update = new TipoPedimento(cat.ID_TIPO_PEDIMENTO,cat.TIPO_PEDIMENTO,cat.CLAVE,cat.REGIMEN,cat.NOTA);
                updateCat = new UpsertStateMsg("Registros actualizados " + dt.ToString(), true);
                return updateCat;
            }
            catch (Exception ex)
            {
                updateCat = new UpsertStateMsg("Error al actualizar " + ex, false);
                return updateCat;
            }
        }
        /// <summary>
        /// Método para obtener un Tipo de Pedimento
        /// </summary>
        /// <param name="TIPO_PEDIMENTO"></param>
        /// <returns></returns>
        public static TipoPedimento GetOneTipoPedimento(int ID_TIPO_PEDIMENTO)
        {
            try
            {
                TipoPedimento cat;
                DataTable dt = elr_tracking_dal.SrvDB.ExecuteQuery("exec SP_GETONE_CAT_TIPO_PEDIMENTO " + ID_TIPO_PEDIMENTO + "");
                if (dt.Rows.Count == 0)
                {
                    return null;
                }
                else if (ID_TIPO_PEDIMENTO == 0)
                {
                    return null;
                }
                else
                {
                    cat = new TipoPedimento(Convert.ToInt32(dt.Rows[0]["ID_TIPO_PEDIMENTO"]), Convert.ToString(dt.Rows[0]["TIPO_PEDIMENTO"]), Convert.ToString(dt.Rows[0]["CLAVE"]), Convert.ToString(dt.Rows[0]["REGIMEN"]), Convert.ToString(dt.Rows[0]["NOTA"]));
                }
                return cat;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        /// <summary>
        /// Constructor sin parámetros
        /// </summary>
        public TipoPedimento() { }
        /// <summary>
        /// Constructor con cuatro parámetros
        /// </summary>
        /// <param name="TIPO_PEDIMENTO"></param>
        /// <param name="CLAVE"></param>
        /// <param name="REGIMEN"></param>
        /// <param name="NOTA"></param>
        public TipoPedimento(string TIPO_PEDIMENTO, string CLAVE, string REGIMEN, string NOTA)
        {
            this.TIPO_PEDIMENTO = TIPO_PEDIMENTO;
            this.CLAVE = CLAVE;
            this.REGIMEN = REGIMEN;
            this.NOTA = NOTA;
        }
        /// <summary>
        /// Constructor con cinco parámetros
        /// </summary>
        /// <param name="ID_TIPO_PEDIMENTO"></param>
        /// <param name="TIPO_PEDIMENTO"></param>
        /// <param name="CLAVE"></param>
        /// <param name="REGIMEN"></param>
        /// <param name="NOTA"></param>
        public TipoPedimento(int ID_TIPO_PEDIMENTO, string TIPO_PEDIMENTO, string CLAVE, string REGIMEN, string NOTA)
        {
            this.ID_TIPO_PEDIMENTO = ID_TIPO_PEDIMENTO;
            this.TIPO_PEDIMENTO = TIPO_PEDIMENTO;
            this.CLAVE = CLAVE;
            this.REGIMEN = REGIMEN;
            this.NOTA = NOTA;
        }

        public event PropertyChangedEventHandler PropertyChanged;
    }
}